package com.smart.community.property.exception;

/**
 * 数据权限异常
 * @author Wu.Liang
 * @since 2025-07-01
 */
public class DataScopeException extends RuntimeException {
    
    private static final long serialVersionUID = 1L;
    
    private String errorCode;
    
    public DataScopeException(String message) {
        super(message);
    }
    
    public DataScopeException(String errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
    }
    
    public DataScopeException(String message, Throwable cause) {
        super(message, cause);
    }
    
    public DataScopeException(String errorCode, String message, Throwable cause) {
        super(message, cause);
        this.errorCode = errorCode;
    }
    
    public String getErrorCode() {
        return errorCode;
    }
    
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
    
    /**
     * 创建物业公司权限拒绝异常
     * @param propertyCompanyId 物业公司ID
     * @return 异常实例
     */
    public static DataScopeException propertyCompanyPermissionDenied(Long propertyCompanyId) {
        return new DataScopeException("DATA_SCOPE_002", 
                "您没有权限访问物业公司ID为 " + propertyCompanyId + " 的数据");
    }
    
    /**
     * 创建社区权限拒绝异常
     * @param communityId 社区ID
     * @return 异常实例
     */
    public static DataScopeException communityPermissionDenied(Long communityId) {
        return new DataScopeException("DATA_SCOPE_001", 
                "您没有权限访问社区ID为 " + communityId + " 的数据");
    }
    
    /**
     * 创建非物业公司用户异常
     * @return 异常实例
     */
    public static DataScopeException notPropertyCompanyUser() {
        return new DataScopeException("DATA_SCOPE_003", 
                "非物业公司人员不能查看本页面数据");
    }
    
    /**
     * 创建非物业公司用户异常（别名方法）
     * @return 异常实例
     */
    public static DataScopeException nonPropertyCompanyUser() {
        return notPropertyCompanyUser();
    }
    
    /**
     * 创建空数据权限异常
     * @return 异常实例
     */
    public static DataScopeException emptyScope() {
        return new DataScopeException("DATA_SCOPE_006", 
                "您没有可访问的数据权限");
    }
    
    /**
     * 创建模块权限拒绝异常
     * @param moduleCode 模块代码
     * @return 异常实例
     */
    public static DataScopeException modulePermissionDenied(String moduleCode) {
        return new DataScopeException("DATA_SCOPE_004", "您没有权限访问模块 " + moduleCode);
    }
    
    /**
     * 创建用户信息错误异常
     * @return 异常实例
     */
    public static DataScopeException userInfoError() {
        return new DataScopeException("DATA_SCOPE_005", "用户信息获取失败，请重新登录");
    }
} 